﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Text;
using System.Xml;
using System.Net;
using WLMCoreLibrary;
using MiWebSite_Core;

namespace MWS_AddDirectory.NuevoAnuncio
{
    public partial class Default : System.Web.UI.Page
    {
        public dbConnector ConexionDB;
        public WebSiteMainConfiguration config;
        protected void Page_Load( object sender, EventArgs e )
        {

            config = WebSiteMainConfiguration.GetConfig();

            //MiWebSiteFunctions.GrantAccess(ref ConexionDB);
            if ( !IsPostBack )
            {
                ConexionDB = new dbConnector( config.Connections["WebSite"].value );
                AnuncioTipoCollection tiposAnuncios = new AnuncioTipoCollection( ref ConexionDB );
                IdTipoAnuncio.DataTextField = "NombreTipoAnuncio";
                IdTipoAnuncio.DataValueField = "id";
                IdTipoAnuncio.DataSource = tiposAnuncios.Elementos;
                IdTipoAnuncio.DataBind();
                NegocioPuntoMapa.Value = DeCurrentDomain.MapPoint.Replace( "(", "" ).Replace( ")", "" ).Replace( " ", "" );
                ConexionDB.CloseConnection();
            }
            if ( Request.QueryString["original"] != null )
            {
            }
            else
            {
                if ( Request.QueryString["xml"] != null )
                {
                    GenerarXML();
                }
                else
                {
                    TransformarXML();
                }
            }

        }

        protected void GenerarXML()
        {
            ConexionDB = new dbConnector( config.Connections["WebSite"].value );
            MiWebSitePage pagina = new MiWebSitePage( ref ConexionDB );
            pagina.Title = "Directorio de " + DeCurrentDomain.Ciudad;
            pagina.DomainName = DeCurrentDomain.DomainName;
            pagina.DomainName = DeCurrentDomain.DomainName;
            pagina.DomainID = DeCurrentDomain.IdentificadorDominio;
            XmlDocument xml = new XmlDocument();
            WebClient web = new WebClient();
            string webpage = web.DownloadString( "http://" + CurrentDomain.DomainName + "/NuevoAnuncio/?original=true" );
            //xml.LoadXml("<MiWebSiteContent><Contenido><![CDATA[<div id='panelAltaAnuncio'>.</div> <script>$('#panelAltaAnuncio').load('/NuevoAnuncio/?original=true')</script> ]]></Contenido></MiWebSiteContent>");
            xml.LoadXml( "<MiWebSiteContent><Contenido><![CDATA[" + webpage + " ]]></Contenido></MiWebSiteContent>" );
            pagina.Contenido = xml;
            Response.ContentType = "text/xml";
            Response.Write( WLMFunctions.SerializeObject( pagina, true ) );
            ConexionDB.CloseConnection();
            Response.End();
        }

        protected void TransformarXML()
        {
            List<ParametroTransformacionXML> parametros = FuncionesDirectorio.GetTransformationParameters();

            if ( DeCurrentDomain.SubDomain != "www" )
            {
                parametros.Add( new ParametroTransformacionXML( "subDomainSystemName", new Categoria( DeCurrentDomain.SubDomain, true, ref ConexionDB ).nombreCategoria ) );
            }

            DominioDirectorio.Text = DeCurrentDomain.DomainName;
            string urlPageXML = "http://" + DeCurrentDomain.SubDomain + "." + DeCurrentDomain.DomainName + "/nuevoAnuncio/?xml=true";
            string HTMLPagina = WLMFunctions.TransformXML( urlPageXML, config.Settings["siteURL"].value + config.Settings["skinPath"].value + "index.xsl", parametros );
            Response.Write( HTMLPagina );
            Response.End();
        }

        protected void AgregarRegistro()
        {
            ConexionDB = new dbConnector( config.Connections["WebSite"].value );
            if ( WLMFunctions.IsValidEmailAddress( Request["email"].ToString() ) )
            {
                string emailCliente = Request["email"].ToString().Trim();
                string urlSalida = "";
                Cliente cliente = new Cliente( emailCliente, ref ConexionDB );
                if ( cliente.id == 0 )
                {
                    cliente = new Cliente( ref ConexionDB );
                    cliente.email = emailCliente;
                    cliente.Nombre = Request["nombre"];
                    cliente.Direccion = Request["direccion"];
                    cliente.Colonia = Request["colonia"];
                    cliente.Municipio = Request["municipio"];
                    cliente.Estado = Request["estado"];
                    cliente.CP = Request["CP"];
                    cliente.RazonSocial = Request["nombre"];

                    string password = WLMFunctions.CreateRandomPassword( 15 );
                    string salt;
                    string hash;
                    SaltedHash hasher = new SaltedHash();
                    hasher.GetHashAndSaltString( password, out hash, out salt );
                    cliente.salt = salt;
                    cliente.password = hash;
                    cliente.Save();
                    cliente.DatoTemporal = password;
                    cliente.EnviarEmailNuevaCuenta( cliente.DatoTemporal );
                }


                Anuncio anuncio = new Anuncio( ref ConexionDB );
                anuncio.idCliente = cliente.id;
                anuncio.nombre = Request["nombre"];
                anuncio.direccion = Request["direccion"];
                anuncio.colonia = Request["colonia"];
                anuncio.municipio = Request["municipio"];
                anuncio.estado = Request["estado"];
                anuncio.CP = Request["CP"];
                anuncio.horario = Request["horario"];
                anuncio.telefono = Request["telefono"];
                anuncio.email = emailCliente;
                anuncio.website = Request["website"].Replace( "http://", "" );
                anuncio.descripcionMini = Request["descripcion"];
                anuncio.ListaCategorias = Request["dropCategorias[]"];
                anuncio.ListaTags = Request["dropTags[]"];
                anuncio.idImagen = Convert.ToInt32( idImagenAnuncio.Value );
                anuncio.mapa = NegocioPuntoMapa.Value;
                anuncio.twitter = Request["Twitter"].Replace( "http://", "" ).Replace( "www.twitter.com", "" ).Replace( "@", "" );
                anuncio.facebook = Request["Facebook"].Replace( "http://", "" ).Replace( "www.facebook.com/", "" ).Replace( "facebook.com/", "" );
                try
                {
                    string[] latLan = null;
                    latLan = anuncio.mapa.Replace( "(", "" ).Replace( ")", "" ).Split( ',' );
                    anuncio.Latitud = Convert.ToDouble( latLan[0] );
                    anuncio.Longitud = Convert.ToDouble( latLan[1] );
                }
                catch
                {
                }
                anuncio.idTipoAnuncio = Convert.ToInt32( IdTipoAnuncio.SelectedValue );
                anuncio.IdComunidad = DeCurrentDomain.IdentificadorDominio;
                anuncio.URL = MiWebSiteFunctions.tituloaPostName( anuncio.nombre );
                if ( anuncio.idTipoAnuncio == 1 )
                {
                    anuncio.idTipoAnuncio = 2;
                    anuncio.PagadoHasta = DateTime.Now.AddDays( 15 );
                }
                else
                    anuncio.PagadoHasta = DateTime.Now.AddMonths( 2 );

                anuncio.Save( true );
                foreach ( string idImgAdic in Request["imagenesAdicionales"].Split( '|' ) )
                {

                    int idIMG=0;
                    if ( WLMFunctions.TryParseToInt( idImgAdic, out idIMG ) )
                    {
                        MiWebSiteMediaImages imagen = new MiWebSiteMediaImages( idIMG, ref ConexionDB );
                        imagen.idCategoria = anuncio.id;
                        imagen.Save();
                    }
                }
                anuncio.PublicarEnTwitter();
                urlSalida = anuncio.FullURL;

                //Response.End();
                Anuncio2dominio relacion = new Anuncio2dominio( ref ConexionDB );
                relacion.idAnuncio = anuncio.id;
                relacion.idDominio = DeCurrentDomain.IdentificadorDominio;
                relacion.Save();

                ConexionDB.CloseConnection();
                Response.Write( "Puede visitar el nuevo anuncio por medio de esta liga <a href='" + urlSalida + "' target='_blank'>" + urlSalida + "</a><br><br><a onclick=\"$('#feedContainer').load('/nuevoAnuncio/?original=true')\">Dar de alta otro anuncio</a>" );
                Response.End();
            }

        }

        protected void ENVIARDATOS_Click( object sender, EventArgs e )
        {
            AgregarRegistro();
        }
    }
}